//执行中间件  user:ip,id,user
let contro = loader('controller');

module.exports=async function ({req,res},route){
    //初始化请求参数
    let endData = await runMidd({req,res,index:-1},route);
    if(endData){ return endData}
//==================================================================
}
//运行中间件 >>回调
async function runMidd(request,{midd,controller,parameter}){
    //结束数据               //中间件是否bei执行的状态
    let endData = undefined,constatus=false
    //中间件没有执行完毕并且endData没有数据的情况下就要不停的循环下一个中间件
    for(;midd.length>++request.index && !endData;){
        let index = request.index
        //执行中间件
        if(midd[index].fun===undefined){request.req.statusCode=502; return {err_code:502,"message":"控制器>>"+midd[index].name+"<<不存在"};}
        endData = await midd[index].fun(request.req,async data=>{
            //执行回调
            if(typeof data == 'string'){
                //解析控制器
                let {fun,name} = data.split('@');
                //使用语法糖解析器，可以优化
                controller=loader(fun);
                controller && (controller=controller[name]);
            }
            //在回调中执行下一个中间件
            return runMidd(request,{midd,controller,parameter});
        },...midd[index].parameter);
    }
    //中间件没有被执行 并且中间件没有拦截就执行一遍控制器
    if(!constatus && endData===undefined){
        //执行控制器
        return await contro(request,controller,parameter);
    }
    return endData;
}